System.IComparable.CompareTo 方法

方法描述

比较当前对象和同一类型的另一对象。

语法定义(C# System.IComparable.CompareTo 方法 的用法)

int CompareTo(
	T other
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
other T 与此对象进行比较的对象。
返回值 System.Int32 一个值,指示要比较的对象的相对顺序。 的含义如下: 值 含义 小于零 此对象小于 other 参数。 零 此对象等于 other。 大于零 此对象大于 other。

提示和注释

CompareTo 提供强类型的比较方法,以排序泛型集合对象的成员。 因此,通常不从开发人员代码直接调用该方法。 List.Sort() 和 Add 等方法会自动调用它。

此方法只是一个定义,必须由特定的类或值类型实现才能生效。 “小于”、“等于”和“大于”这几种比较的含义取决于具体的实现。

根据定义,任何对象与 null 相比较都要大,两个空引用的比较结果为彼此相等。

对实现者的说明

对于对象 A、B 和 C,以下条件必须为真:

A.CompareTo(A) 必须返回零。

如果 A.CompareTo(B) 返回零,则 B.CompareTo(A) 必须返回零。

如果 A.CompareTo(B) 返回零并且 B.CompareTo(C) 返回零,则 A.CompareTo(C) 必须返回零。

如果 A.CompareTo(B) 返回一个非零值,则 B.CompareTo(A) 必须返回符号相反的值。

如果 A.CompareTo(B) 返回一个不等于零的值 x,并且 B.CompareTo(C) 返回一个与 x 符号相同的值 y,则 A.CompareTo(C) 必须返回与 x 和 y 都符号相同的值。

对调用者的说明

使用 CompareTo 方法可确定类的实例的排序。

System.IComparable.CompareTo 方法例子

在调用 Add 方法时,SortedList 集合使用 IComparable 实现对列表项进行排序,然后,这些列表项将按温度的升序显示。

using System;
using System.Collections.Generic;

public class Temperature : IComparable
{
    // Implement the CompareTo method. For the parameter type, Use 
    // the type specified for the type parameter of the generic 
    // IComparable interface. 
    //
    public int CompareTo(Temperature other)
    {
        // The temperature comparison depends on the comparison of the
        // the underlying Double values. Because the CompareTo method is
        // strongly typed, it is not necessary to test for the correct
        // object type.
        return m_value.CompareTo(other.m_value);
    }

    // The underlying temperature value.
    protected double m_value = 0.0;

    public double Celsius    
    {
        get
        {
            return m_value - 273.15;
        }
    }

    public double Kelvin    
    {
        get
        {
            return m_value;
        }
        set
        {
            if (value < 0.0)
            {
                throw new ArgumentException("Temperature cannot be less than absolute zero.");
            }
            else
            {
                m_value = value;
            }
        }
    }

    public Temperature(double kelvins)
    {
        this.Kelvin = kelvins;
    }
}

public class Example
{
    public static void Main()
    {
        SortedList temps = 
            new SortedList();

        // Add entries to the sorted list, out of order.
        temps.Add(new Temperature(2017.15), "Boiling point of Lead");
        temps.Add(new Temperature(0), "Absolute zero");
        temps.Add(new Temperature(273.15), "Freezing point of water");
        temps.Add(new Temperature(5100.15), "Boiling point of Carbon");
        temps.Add(new Temperature(373.15), "Boiling point of water");
        temps.Add(new Temperature(600.65), "Melting point of Lead");

        foreach( KeyValuePair kvp in temps )
        {
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius);
        }
    }
}

/* This code example produces the following output:

Absolute zero is -273.15 degrees Celsius.
Freezing point of water is 0 degrees Celsius.
Boiling point of water is 100 degrees Celsius.
Melting point of Lead is 327.5 degrees Celsius.
Boiling point of Lead is 1744 degrees Celsius.
Boiling point of Carbon is 4827 degrees Celsius.

*/

异常

异常 异常描述

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。